òɾۿûѧϰʹá
ԭַhttps://www.joinquant.com/post/13162

ԭһ˵ʽ鵽ԭĺ߽ۡ


ԭĲԴ£

# 뺯
import jqdata
import numpy as np

# ʼ趨׼ȵ
def initialize(context):
    # 趨300Ϊ׼
    set_benchmark('000300.XSHG')
    # ̬Ȩģʽ(ʵ۸)
    set_option('use_real_price', True)
    # ݵ־ log.info()
    log.info('ʼʼȫֻһ')
    # ˵orderϵAPIıerror͵log
    # log.set_level('order', 'error')
    set_slippage(FixedSlippage(0.02))
    
    ### Ʊ趨 ###
    # ƱÿʽʱǣʱӶ֮ʱӶ֮ǧ֮һӡ˰, ÿʽӶͿ5Ǯ
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    ## кreference_securityΪʱĲοģıֻ֣˴'000300.XSHG''510300.XSHG'һģ
      # ǰ
   
      # ʱ
    run_daily(market_open, time='open', reference_security='000300.XSHG')
      # ̺
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    

    
## ʱк
def market_open(context):
    log.info('ʱ(market_open):'+str(context.current_dt.time()))
    security ='600519.XSHG'
    # ȡƱ̼
    price= attribute_history(security, 20, '1d', ['close'],skip_paused=True)
    
    #ȡֽ
    
    cash=context.portfolio.available_cash
    
    #ȡǰλϢ   
    current_position=context.portfolio.positions[security].closeable_amount
    
    # numpyԴĺȥ20յƶƽΪй
    mid=np.mean(price)
    
    #numpyԴ20յı׼
    std=np.std(price)
    
    #upperϹ
    upper=mid+2*std
    
    #lower¹
    lower=mid-2*std
    
    #ȡǰ̼
    p=price['close'][-1]
    
    if p>upper[-1] and current_position<=0:
        order_value(security, cash)
    elif p<lower[-1] and current_position>=0:
        order_target_value(security,0)
   
 
## ̺к  
def after_market_close(context):
    log.info(str('ʱ(after_market_close):'+str(context.current_dt.time())))
    #õгɽ¼
    trades = get_trades()
    for _trade in trades.values():
        log.info('ɽ¼'+str(_trade))
    log.info('һ')
    log.info('##############################################################')
